/**
 *
 * @description:管理员模块
 * @author:junyong.hong
 * @createTime:2018/1/8
 * @version:1.0.0.0
 * @history:
 *    1、
 *    2、
 *
 */
var express = require('express');
var router = express.Router();

var User = require('../models/User');//用户
var Category = require('../models/Category');//分类
var Content = require('../models/Content');//内容
var MarkDown = require("markdown").markdown;


router.use(function (req,res,next) {
   if(!req.userInfo.isAdmin){
       // 如果当前的用户是非管理员
       res.send('读不起，只有管理员才可以进入后台管理');
       return;
   }
   next();
});


/**
 * 后台管理首页
 */
router.get('/',function (req,res,next) {
    res.render('admin/admin_index',{
        userInfo:req.userInfo//用于显示用户名
    })

});

/*================================== 用户管理 begin =======================================*/
/**
 * 用户管理
 */
router.get('/user',function (req,res) {
    /**
     * 从数据库中读取所有的用户数据
     *
     * limit(Number):限制获取的数据条数
     * skip(2):忽略数据的条数
     *
     *
     * 每页显示2条
     * 1：1-2 skip：0  -> （当前页-1）*limit
     * 2：3-4 skip：2
     * 3：5-6  skip:4
     */

    var page = Number(req.query.page || 1);//获取地址栏上的参数:页码
    var limit = 2;//每页2条
    var pages = 0;


    User.count().then(function (count) {
        // console.log(count)   //计算总条数

        // 计算总页数
        pages = Math.ceil(count / limit);
        // 取值不能超过pages
        page = Math.min(page, pages);
        // 取值不能小于1
        page = Math.max(page ,1);

        var skip = (page - 1) * limit;//忽略条数

        User.find().limit(limit).skip(skip).then(function (users) {
            res.render('admin/user/user_index',{
                userInfo:req.userInfo,
                users:users,

                count:count,
                pages:pages,
                limit:limit,
                page:page
            });
        });

    });
});

/*================================== 用户管理 end =======================================*/



/*================================== 分类管理 end =======================================*/
/**
 * 分类首页
 */
router.get('/category',function (req,res) {
   // res.render('admin/category/category_index',{
   //     userInfo:req.userInfo
   // });

    var page = Number(req.query.page || 1);//获取地址栏上的参数:页码
    var limit = 5;//每页2条


    Category.count().then(function (count) {
        // console.log(count)   //计算总条数

        // 计算总页数
        pages = Math.ceil(count / limit);
        // 取值不能超过pages
        page = Math.min(page, pages);
        // 取值不能小于1
        page = Math.max(page ,1);

        var skip = (page - 1) * limit;//忽略条数

        //1：升序  -1：降序
        Category.find().sort({_id:-1}).limit(limit).skip(skip).then(function (categories) {
            res.render('admin/category/category_index',{
                userInfo:req.userInfo,
                categories:categories,

                count:count,
                pages:pages,
                limit:limit,
                page:page
            });
        });

    });
});

/**
 * 跳转到添加分类的页面上
 */
router.get('/category/add',function (req,res) {
    res.render('admin/category/category_add',{
        userInfo:req.userInfo
    });
});

/**
 * 添加分类保存
 */
router.post('/category/add',function (req,res) {
    var name = req.body.name || '';

    if(name == ''){
        res.render('admin/common/error',{
            userInfo:req.userInfo,

            message:'名称不能为空'
        });
        return;
    }

    // 数据库中是否已经存在同名的分类名称
    Category.findOne({
        name:name
    }).then(function (rs) {
        if(rs){
            res.render('admin/common/error',{
                userInfo:req.userInfo,

                message:'分类已经存在了'
            });
            return Promise.reject();
        }else{
            //数据库中不存在该分类，可以保存
            return new Category({
                name:name
            }).save();
        }
    }).then(function (newCategory) {
        res.render('admin/common/success',{
            userInfo:req.userInfo,

            message:'分类保存成功',
            url:'/admin/category'
        })
    });
});

/**
 * 分类修改
 */
router.get('/category/edit',function (req,res) {
   //获取要修改的分类的信息，并且用表单的形式展现出来
   var id = req.query.id || '';

   //获取要修改分类的信息
    Category.findOne({
       _id:id
    }).then(function (category) {
        if(!category){
            res.render('admin/common/error',{
                userInfo:req.userInfo,
                message:'分类信息不存在'
            });
            return Promise.reject();
        }else{
            res.render('admin/category/category_edit',{
                userInfo:req.userInfo,
                category:category
            });
        }
    });
});


/**
 * 分类修改的保存
 */
router.post('/category/edit',function (req,res) {
    var id = req.body.id || '';
    var name = req.body.name || '';

    //获取要修改分类的信息
    Category.findOne({
        _id:id
    }).then(function (category) {
        if(!category){
            res.render('admin/common/error',{
                userInfo:req.userInfo,
                message:'分类信息不存在',
                url: "/admin/category"
            });
            return Promise.reject();
        }else{
            //当用户没有做任何修改提交的时候
            if(name == category.name){
                res.render('admin/common/success',{
                    userInfo:req.userInfo,
                    message:'修改成功',
                    url:'admin/category'
                });
                return Promise.reject();
            }else{
                //要修改的分类名称是否已经在数据库中存在(return完后会执行下面的then)
                return Category.findOne({
                    _id:{$ne:id},//id不等于当前的id
                    name:name
                });
            }
        }
    }).then(function (sameCategory) {
        if(sameCategory){
            res.render('admin/common/error',{
                userInfo:req.userInfo,
                message:'数据库中已经存在同名的分类',
                url: "/admin/category"
            });
            return Promise.reject();
        }else{
            return Category.update({
                _id:id,
            },{
                name:name
            })
        }
    }).then(function () {
        res.render('admin/common/success',{
            userInfo:req.userInfo,
            message:'修改成功',
            url:'/admin/category'
        });
    });



});


/**
 * 分类删除
 */
router.get('/category/delete',function (req,res) {
   var id = req.query.id || '';
   Category.remove({
       _id:id
   }).then(function () {
       res.render('admin/common/success',{
           userInfo:req.userInfo,
           message:'删除成功',
           url:'/admin/category'
       });
   })
});
/*================================== 分类管理 end =======================================*/



/*================================== 内容管理 begin =======================================*/
/**
 * 内容首页
 */
router.get('/content',function (req,res,next) {

    var page = Number(req.query.page || 1);//获取地址栏上的参数:页码
    var limit = 5;//每页2条
    var pages = 0;

    Content.count().then(function (count) {
        // console.log(count)   //计算总条数

        // 计算总页数
        pages = Math.ceil(count / limit);
        // 取值不能超过pages
        page = Math.min(page, pages);
        // 取值不能小于1
        page = Math.max(page ,1);

        var skip = (page - 1) * limit;//忽略条数

        //populate关联对象
        //populate('category'):category对应的是schemas/content.js里的category对象
        Content.find().limit(limit).skip(skip).populate(['category','user']).sort({
            addTime:-1
        }).then(function (contents) {

            // console.log(contents);

            res.render('admin/content/content_index',{
                userInfo:req.userInfo,
                contents:contents,

                count:count,
                pages:pages,
                limit:limit,
                page:page
            });
        });

    });


});


/**
 * 内容添加页面
 */
router.get('/content/add',function (req,res,next) {

    //1、读取分类信息
    Category.find().sort({_id:-1}).then(function (categories) {

        //2、跳转到添加内容页面
        res.render('admin/content/content_add',{
            userInfo:req.userInfo,
            categories:categories
        });
    });
});

/**
 * 内容保存
 */
router.post('/content/add',function (req,res) {

    if(req.body.category == ''){
        res.render('admin/common/error',{
            userInfo:req.userInfo,
            message:'内容分类不能为空~'
        });
        return;
    }

    if(req.body.title == ''){
        res.render('admin/common/error',{
            userInfo:req.userInfo,
            message:'标题不能为空~'
        });
        return;
    }

    new Content({
        category:req.body.category,
        title:req.body.title,
        user:req.userInfo._id.toString(),//用户的id
        description:req.body.description,
        content:MarkDown.toHTML(req.body.content)

    }).save().then(function () {
        res.render('admin/common/success',{
            userInfo:req.userInfo,
            message:'内容保存成功~',
            url:'/admin/content'
        });
    });

});


/**
 * 修改内容
 *
 */
router.get('/content/edit',function (req,res) {
    var id = req.query.id || '';

    var categories = [];

    // 1、获取所有分类
    Category.find().sort({_id:-1}).then(function (rs) {

        categories = rs;


        // 2、获取文章内容
        return Content.findOne({
            _id:id
        }).populate('category');


    }).then(function (content) {

        if(!content){
            res.render('admin/common/error',{
                userInfo:req.userInfo,
                message:'指定内容不存在'
            });
            return Promise.reject();
        }else{
            res.render('admin/content/content_edit',{
                userInfo:req.userInfo,
                categories:categories,
                content:content
            })
        }
    });
});


/**
 * 保存修改内容
 */
router.post('/content/edit',function (req,res) {
    var id = req.body.id || '';

    if(req.body.category == ''){
        res.render('admin/common/error',{
            userInfo:req.userInfo,
            message:'内容分类不能为空~'
        });
        return;
    }

    if(req.body.title == ''){
        res.render('admin/common/error',{
            userInfo:req.userInfo,
            message:'标题不能为空~'
        });
        return;
    }

    Content.update({
        _id:id
    },{
        category:req.body.category,
        title:req.body.title,
        description:req.body.description,
        content:req.body.content
    }).then(function () {
        res.render('admin/common/success',{
            userInfo:req.userInfo,
            message:'内容保存成功',
            url:'/admin/content/edit?id=' + id
        })
    })
});

/**
 * 内容删除
 */
router.get('/content/delete',function (req,res) {
    var  id = req.query.id || '';

    Content.remove({
        _id:id
    }).then(function () {
        res.render('admin/common/success',{
            userInfo:req.userInfo,
            message:'删除成功',
            url:'/admin/content'
        })
    })

});


/*================================== 内容管理 end =======================================*/

//返回数据
module.exports = router;